草庐IT

C++ union 与 reinterpret_cast

全部标签

c++ - 如何避免在 C++ 中将 const_cast 与 std::vector::erase() 一起使用?

我有这样一个类:templateclassAdjacencyList{public:voiddelete_node(constT&);protected:consttypenamestd::vector::const_iterator_iterator_for_node(conststd::vector&,constT&);};templatevoidAdjacencyList::delete_node(constT&node){_nodes.erase(_iterator_for_node(_nodes,node));}templateconsttypenamestd::vector

c++ - 删除 union 中的指针

我尝试了一些有趣的代码(至少对我来说是这样!)。在这里。#includestructmyStruct{intone;/*Destructor:Programcrashesifthebelowcodeuncommented*//*~myStruct(){std::cout我已将内存分配给charPtr并使用structPtr删除。当我向myStruct添加析构函数时它崩溃了,否则没有问题。这里到底发生了什么。据我所知,delete[]将调用析构函数的次数与new[]中给出的次数一样多。为什么在myStruct中没有析构函数时它不会崩溃? 最佳答案

c++ - 使用默认值而不是异常来 boost numeric_cast<>?

每当boost的numeric_cast转换失败,抛出异常。boost中是否有类似的模板让我指定一个默认值,或者在这种情况下捕获异常是我唯一能做的?我不太担心所有额外异常处理的性能,但我宁愿使用标准模板也不愿编写无用的包装函数。另外,根据以往的经验,我认为boost很有可能真的有我想的,只是一直没有找到。 最佳答案 numeric_cast函数只是调用boost::numeric::converter具有默认参数的模板类。其中一个参数是OverflowHandler,默认值为def_overflow_handler,但您可以指定si

c++ - 使用 C++ union ,当你想要的成员未知时

基本上,我必须为我的tokenType结构重载structtokenType{intcategory;//oneoftokencategoriesdefinedaboveunion{intoperand;charsymbol;//'+','-','*','/','^','='};intprecedence()const;}我的重载方法的标题是:ostream&operator因此,我需要打印出structtk中的值,int或char。当我不知道变量是操作数还是符号时,如何访问union中包含的内容?谢谢。 最佳答案 您需要做的是查看

c++ - 如何零初始化 union ?

考虑以下代码:structT{inta;union{struct{inta;}s1;struct{charb[1024];}s2;};};intmain(){Tx=T();}由于调用了显式构造函数,上述代码最终对x中的所有数据成员进行了零初始化。但即使未调用显式,我也希望将x初始化为零。要做到这一点,一个想法是在它们的声明中初始化数据成员,这似乎对T::a没问题。但是我怎样才能通过使用零初始化union占用的所有内存相同的标准?structT{inta=0;union{struct{inta;}s1;struct{charb[1024];}s2;};};intmain(){Tx;//I

C++ 编译错误 : "cast from ' WCHAR *' to ' WORD' loses precision"

MyGUI库。源码中有一行:mHandle=(size_t)::LoadCursor(NULL,MAKEINTRESOURCE(IDC_ARROW));mHandle是size_tLoadCursor返回HCURSOR。错误:D:\Dev\MyGUI_3.2.0_RC1\Common\Input\Win32\ResourceW32Pointer.cpp:48:error:castfrom'WCHAR*'to'WORD'losesprecision这是完整的来源:www.pastebin.com/gzqLBFh9MinGW编译器。有错误castfrom'CHAR*'to'WORD'los

c++ - constant 和 reinterpret cast 是否在编译时发生?

我读到过static_cast发生在编译时,dynamic_cast发生在运行时,因此比static_cast慢。dynamic_cast可以返回空指针(当与指针一起使用时)或以其他方式抛出错误的转换异常。我的问题是reinterpret_cast和const_cast是发生在编译时还是运行时?我认为解释转换发生在运行时,因为它的行为类似于dynamic_cast指示转换是否成功。我对么?const_cast是编译时间吗? 最佳答案 动态转换是唯一需要在运行时“计算”的。所有其他类型转换均在编译时计算。static_cast的机器代

c++ - unsigned char 的 boost::lexical_cast 和 std::to_string 的正确结果是什么

以下从字符转换为字符串的正确结果是什么?我听说旧的bo​​ost版本1.46lexical_cast输出是56,我附近没有那个版本,我无法测试它。但boostlibrary(1.49)输出为:8unsignedcharc=56;std::strings=boost::lexical_cast(c);std::coutC++11to_string输出为:56std::cout 最佳答案 std::to_string仅提供数字类型的重载,可能解析为unsigned在这种情况下的版本。lexical_cast,OTOH,依赖std::os

c++ - 同名类之间的共享 vtables : call to virtual method crashes when casting to base type

检查下面的更新,我可以重现并需要帮助。我有一个奇怪的崩溃,其中一些方法在除1个地方之外的任何地方都可以正常工作。这是代码:structbase{virtualwchar_t*get()=0;//canbe{returnNULL;}doesn'tmatter};structderived:publicbase{virtualwchar_t*get(){returnSomeData();}};structcontainer{deriveddata;};//thisisapprox.howitisusedinrealprogramvoidoutput(constbase&data){data

c++ - 使用 dynamic_cast 向下转型返回 null

我尝试使用dynamic_cast将基类对象转换为派生类对象,但dynamic_cast返回null。是否可以使用dynamic_cast向下转型?structA{virtual~A(){}};structB:A{};intmain(){A*a=newA();B*b=dynamic_cast(a);if(b){std::cout此代码打印出“无值”。 最佳答案 因为a实际上是指向A,而不是B,所以dynamic_cast会失败。Isitpossibletodowncastusingdynamic_cast?是的,你可以,例如如果a恰